package 面向对象编程;

import java.math.BigInteger;
import java.util.Random;
import java.security.MessageDigest;
/*
1、BigInteger(byte[] val)：将包含BigInteger的二进制补码表示形式的byte数组转换为BigInteger。
   把一个(带符号)整数的二进制补码表示的字节数组转换成BigInteger,假定输入的数组是big-endian格式
2、BigInteger(int signum, byte[] magnitude)：将BigInteger的符号-数量表示形式转换为BigInteger。
  此构造函数用于将BigInteger的符号大小表示法转换成一个BigInteger值。(和第一种一样，增加了符号：1，0，-1)
  符号表示整数数值(-1表示负数、0表示零、1表示正数)
3、BigInteger(int bitLength, int certainty, Random rnd)：构造一个随机生成的正BigInteger，它可能是一个具有指定bitLength的素数。
4、BigInteger(int numBits, Random rnd)：构造一个随机生成的BigInteger，它是在0到(2^numBits -1)范围内均匀分布的值。
5、BigInteger(String val)：将BigInteger的十进制字符串表示形式转换为BigInteger。
6、BigInteger(String val, int radix)：将指定基数的BigInteger的字符串表示形式转换为BigInteger。

*/
public class 使用Integer {
	public static void main(String[] args) throws Exception {
		//字节数组转十进制
		//byte[] arr = new byte[]{(byte) 1,(byte) 100}; //{}
		byte[] arr = new byte[]{1,0,0}; //{}
		BigInteger b0 = new BigInteger(1,arr);
		System.out.println(b0); // 输出256。
		
		//字符串转数字,将一个字符串转换成一个数字，字符串需要是一个由正负号加上数字组成的字符串，不然会抛出异常。
		BigInteger b1 = new BigInteger("123456789987654321");
		System.out.println(b1); // 输出 123456789987654321
		
		//n进制转十进制
		BigInteger b2 = new BigInteger("10000000", 2); // 输入2进制转10进制
		System.out.println(b2); // 输出 128
		BigInteger b3 = new BigInteger("FF", 16); // 输入16进制转10进制
		System.out.println(b3); // 输出 255
		
		//BigInteger → String
		BigInteger bigInteger = new BigInteger("123456789");
		String str = bigInteger.toString();
		System.out.println(str); //123456789
		
		//用toString(int radix)方法。将BigInteger对象转换成二进制字符串
		BigInteger b4 = new BigInteger("123456789");
		String binaryStr = b4.toString(2);
		System.out.println(binaryStr); //111010110111100110100010101
		
		MessageDigest md = MessageDigest.getInstance("MD5");
      // 反复调用update输入数据:
      md.update("Hello".getBytes("UTF-8"));
      md.update("World".getBytes("UTF-8"));
      byte[] result = md.digest(); // 16 bytes: 68e109f0f40ca72a15e05cc22786f8e6
      System.out.println(new BigInteger(1, result).toString(16));
	}
}
